package bupt.party.online.dao;

import java.util.List;
import java.util.Set;

import org.hibernate.criterion.DetachedCriteria;

import bupt.party.online.dto.BranchStudyRecordDTO;
import bupt.party.online.dto.PartyStudyRecordDTO;
import bupt.party.online.dto.PersonStudyRecordDTO;
import bupt.party.online.model.LearnRecord;

public interface ILearnRecordDao {
	public LearnRecord findLearnRecordByID(int id);
	public int getResultCount();
	public List<LearnRecord> getResultsByPage(int firstResult,int pageSize);
	
	/**
	 * 保存一条学习记录
	 * @param learnRecord
	 */
	public boolean saveOrUpdate(LearnRecord learnRecord);
	
	/**
	 * 根据学号获得学生的学习记录
	 * @param studentNo
	 * @return
	 */
	public List<LearnRecord> findAllLearnRecordByStudentNO(String studentNo); 
	
	
	/**
	 * 根据某一个条件的查询出一定数量的记录数
	 * @param queryString
	 * @param values
	 * @param firstResult
	 * @param pageSize
	 * @return
	 */
	public List<LearnRecord> QueryByConditions(String queryString,
			Object[] values, int firstResult, int pageSize);
	
	
	/**
	 * 分页查询学生学习记录列表
	 * @param branch_ids
	 * @param year
	 * @param studentNO
	 * @param studentName
	 * @param firstpa
	 * @param secondpa
	 * @return
	 */
	public List<PersonStudyRecordDTO> queryPersonLearnRecordByYear(Set<Integer> branch_ids,
			String year, String studentNO, String studentName, Integer firstpa,
			Integer secondpa,int pageNow,int pageSize); 
	
	
	/**
	 * 根据条件查询学生数量
	 * @param branch_ids
	 * @param year
	 * @param studentNO
	 * @param studentName
	 * @param firstpa
	 * @param secondpa
	 * @return
	 */
	public int getStudentCountByCondotions(Set<Integer> branch_ids,
			String year, String studentNO, String studentName, Integer firstpa,
			Integer secondpa);
	
	
	/**
	 * 根据条件查询支部的个数。 有可能第一年没有支部，第二年有了某支部；有可能第一年有支部，第二年支部成员毕业了，没有了这个支部。
	 * @param branch_ids
	 * @param year
	 * @return
	 */
	public int getBranchCountByCondotions(Set<Integer> branch_ids,  String year);
	
	
	/**
	 * 获得支部的学时统计信息列表
	 * @param branch_ids
	 * @param year
	 * @param pageNow
	 * @param pageSize
	 * @return
	 */
	public List<BranchStudyRecordDTO> getBranchStudyRecordDTOByConditions(Set<Integer> branch_ids,String year,
			int pageNow,int pageSize);
	
	/**
	 * 根据支部的id获得支部学生的学习时长列表
	 * @param branchId
	 * @return
	 */
	public List  getStudentStudyTimeByBranchId(int branchId,String year);
	
	
	/**
	 * 根据支部的id获得  分党委学生的学习时长列表
	 * @param branchId
	 * @return
	 */
	public List  getStudentStudyTimeByPartyId(Set<Integer> branch_ids,String year);
	
	/**
	 * 获得分党委的数量。（根据日期的不同，查询的结果可能不同，因为有的分党委可能是新增加的。）
	 * @param branch_ids
	 * @param year
	 * @return
	 */
	public  int getPartyCountByCondotions(Set<Integer> branch_ids,String year);
	
	
	/**
	 * 获得分党委的学时统计信息列表
	 * @param branch_ids
	 * @param year
	 * @param pageNow
	 * @param pageSize
	 * @return
	 */
	public List<PartyStudyRecordDTO> getPartyStudyRecordDTOByConditions(Set<Integer> branch_ids,String year,
			int pageNow,int pageSize);
}
